'''
此文件用于解析Config文件夹中的
'''
import os
import configparser
from TongYong.Decode_dict import Decode_dict
import Config.Config_file_Path as conf_pth
from Config import File_name  # 导入配置ini_file的文件
from Log_Info import Log
import yaml

class Decode_ini:
    '''
    定义一个解析INI配置文件的类
    '''
    @classmethod # 调用classmethod装饰器，这样类方法里面的函数调用的适合，不需要初始化即可进行，但需要加上cls.
    def Decode_ini_file(cls,filename): # 定义一个解析INI文件的函数，传入文件名
        # 获取到文件名的绝对路径，方法时：用os.path.join函数对绝对路径和文件名进行拼接
        abs_ini_path =os.path.join(conf_pth.config_path,filename)
        if not os.path.isfile(abs_ini_path):
            raise FileNotFoundError

        c_shilihua = configparser.ConfigParser()  # 解析INI文件前， 实例化一个对象，这是类中一个方法
        c_shilihua.read(abs_ini_path) # 读取abs_ini_path文件中的内容
        all_node = Decode_dict() # 实例化一个节点，进行数据的转换
        print(type(all_node))

        for node in c_shilihua.sections():
            all_node[node] = Decode_dict(c_shilihua[node])

        return all_node

    @classmethod
    # 此处File_name为定义的ini_file_name对应的文件名，需进行对应修改；
    def get_ini_node(cls,node,ini_file = File_name):
        all_node = cls.Decode_ini_file(ini_file)
        return all_node[node]


class Decode_yaml:
    @classmethod
    def Decode_yaml_file(cls,filename):
        abs_yaml_path = os.path.join(conf_pth.data_path,filename)
        if not os.path.isfile(abs_yaml_path):
            raise FileNotFoundError

        with open(abs_yaml_path,encoding='utf-8') as fr_yaml:
            try:
                yaml_data = yaml.load(fr_yaml,yaml.SafeLoader)
                print("yaml_data=",yaml_data)
            except:
                Log.error("{}文件解析出错，格式不正确", filename)
                return {}
            else:
                return yaml_data

    @classmethod
    def get_ymal_config_node(cls,node = None):
        # 此处File_name为定义的ini_file_name对应的文件名，需进行对应修改；
        yaml_file = os.path.join(conf_pth.config_path,File_name.yaml_config_file_name)
        yaml_data = cls.Decode_yaml_file(yaml_file)
        if node:
            print("yaml_data.get(node):",yaml_data.get(node))
            return yaml_data.get(node)
        else:
            return yaml_data


# if __name__ == '__main__':
#     print(Decode_yaml.get_ymal_config_node())
#     print(Decode_yaml.get_ymal_config_node("email"))
#     print(Decode_yaml.get_ymal_config_node("email1"))


